﻿using System;
using System.IO;
using System.Data;
using System.Windows;
using System.Collections;
using System.Windows.Input;
using System.ComponentModel;
using System.Windows.Controls;
using Sinacor.Infra.UI.Common;
using Sinacor.Infra.UI.Controls;
using Sinacor.UI.Bovespa.Corretagem.Model;
using Sinacor.UI.Bovespa.Corretagem.Presenter;
using Sinacor.Infra.UI.Controls.SmartClient;
using System.Collections.Generic;
using Sinacor.Infra.UI.Controls.SmartClient.Validation;

namespace Sinacor.UI.Bovespa.Corretagem.View.SmartClient
{
    /// <summary>
    /// Class - CadastroTipoAplicacaoPolitica
    /// </summary>
    public partial class CadastroTipoAplicacaoPolitica : SinacorWindow, ITipoAplicacaoPolitica
    {
        #region Campos

            /// <summary>
            /// PresenterTipoAplicacaoPolitica
            /// </summary>
            public Presenter.TipoAplicacaoPolitica PresenterTipoAplicacaoPolitica { get; set; }

        #endregion

        #region Contrutor

            public CadastroTipoAplicacaoPolitica()
            {
                InitializeComponent();

                this.PresenterTipoAplicacaoPolitica = new Presenter.TipoAplicacaoPolitica(this);
                this.dtgTipoAplicacaoPolitica.NewItemType = typeof(Model.TipoAplicacaoPolitica);

                DataContext = PresenterTipoAplicacaoPolitica;

                this.AfterInitialize += new RoutedEventHandler(Inicializar);  
            }
        
        #endregion   

        #region Eventos

            #region InsertBegun

                private void dtgTipoAplicacaoPolitica_InsertBegun(object sender, ItemEventArgs e)
                {
                    if (e.OriginalSource is BaseRow)
                    {
                        this.ClearServiceErrors();
                    }
                }
            
            #endregion

            #region CancelingInsert

                private void dtgTipoAplicacaoPolitica_CancelingInsert(object sender, CancelItemEventArgs e)
                {
                    if (e.OriginalSource is SinacorDataGrid)
                    {
                        this.ClearServiceErrors();
                    }
                }
            
            #endregion

            #region EndingInsert

                private void dtgTipoAplicacaoPolitica_EndingInsert(object sender, CancelItemEventArgs e)
                {
                    if (e.OriginalSource is BaseRow)
                    {
                        Model.TipoAplicacaoPolitica tipoAplicacao = (Model.TipoAplicacaoPolitica)dtgTipoAplicacaoPolitica.EditItem;

                        try
                        {
                            this.ClearServiceErrors();
                            this.ShowUserWaitingProcess();

                            e.Cancel = !PresenterTipoAplicacaoPolitica.IncluirTipoAplicacaoPolitica(tipoAplicacao);
                        }
                        finally
                        {
                            this.HideUserWaitingProcess();
                        }
                    }
                }
            
            #endregion

            #region UpdateBegun

                private void dtgTipoAplicacaoPolitica_UpdateBegun(object sender, ItemEventArgs e)
                {
                    if (e.OriginalSource is BaseRow)
                    {
                        this.ClearServiceErrors();
                    }
                }
            
            #endregion

            #region CancelingUpdate

                private void dtgTipoAplicacaoPolitica_CancelingUpdate(object sender, CancelItemEventArgs e)
                {
                    if (e.OriginalSource is BaseRow)
                    {
                        this.ClearServiceErrors();
                    }
                }
            
            #endregion

            #region EndingUpdate

                private void dtgTipoAplicacaoPolitica_EndingUpdate(object sender, CancelItemEventArgs e)
                {
                    if (e.OriginalSource is BaseRow)
                    {
                        Model.TipoAplicacaoPolitica tipoAplicacao = (Model.TipoAplicacaoPolitica)dtgTipoAplicacaoPolitica.EditItem;

                        try
                        {
                            this.ClearServiceErrors();
                            this.ShowUserWaitingProcess();

                            e.Cancel = !PresenterTipoAplicacaoPolitica.AlterarTipoAplicacaoPolitica(tipoAplicacao);
                        }
                        finally
                        {
                            this.HideUserWaitingProcess();
                        }
                    }
                }
            
            #endregion

            #region Deleting

                private void dtgTipoAplicacaoPolitica_Deleting(object sender, CancelItemsEventArgs e)
                {
                    try
                    {
                        this.ClearServiceErrors();
                        this.ShowUserWaitingProcess();

                        Model.TipoAplicacaoPolitica tipoAplicacao = (Model.TipoAplicacaoPolitica)dtgTipoAplicacaoPolitica.SelectedItem;
                        Model.Parameter.FiltroTipoAplicacaoPoliticaChave filtro = new Model.Parameter.FiltroTipoAplicacaoPoliticaChave();

                        filtro.Codigo = tipoAplicacao.Codigo;

                        e.Cancel = !PresenterTipoAplicacaoPolitica.ExcluirTipoAplicacaoPolitica(filtro);
                    }
                    finally
                    {
                        this.HideUserWaitingProcess();
                    }
                }
            
            #endregion

        #endregion

        #region Métodos

            /// <summary>
            /// Inicializar
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void Inicializar(object sender, RoutedEventArgs e)
            {
                try
                {
                    ShowUserWaitingProcess();
                    this.PresenterTipoAplicacaoPolitica.Inicializar();
                }
                finally
                {
                    HideUserWaitingProcess();
                }
            }
        
        #endregion

        #region ITipoAplicacaoPolitica Members

            public void AtualizarTiposAplicacoesPoliticas()
            {
                this.dtgTipoAplicacaoPolitica.UpdateTarget(SinacorDataGrid.ItemsSourceProperty);
            }

            public bool ConfirmaExclusaoTipoAplicacaoPolitica()
            {
                if (SinacorMessageBox.Show(FindResource("Bovespa.Corretagem.Message.ConfirmacaoExclusaoTipoAplicacaoPolitica").ToString(), SinacorMessageBoxButton.YesNo, SinacorMessageBoxImage.Question) == SinacorMessageBoxResult.Yes)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }

            public void InformarAlteracaoRealizadaComSucesso()
            {
                SinacorMessageBox.Show(FindResource("Bovespa.Corretagem.Message.AtualizacaoTipoAplicacaoPoliticaRealizadaComSucesso").ToString(), SinacorMessageBoxButton.Ok, SinacorMessageBoxImage.Information);
            }

            public void InformarExclusaoRealizadaComSucesso()
            {
                SinacorMessageBox.Show(FindResource("Bovespa.Corretagem.Message.ExclusaoRealizadaSucesso").ToString(), SinacorMessageBoxButton.Ok, SinacorMessageBoxImage.Information);
            }

            public void InformarInclusaoRealizadaComSucesso()
            {
                SinacorMessageBox.Show(FindResource("Bovespa.Corretagem.Message.InclusaoRealizadaSucesso").ToString(), SinacorMessageBoxButton.Ok, SinacorMessageBoxImage.Information);
            }

            public void InformarNenhumRegistroEncontrado()
            {
                this.ShowError("Bovespa.Corretagem.Message.NenhumRegistroEncontradoTipoAplicacaoPolitica");
            }

        #endregion        
    }
}
